package com.taskflow.controller;

import com.taskflow.common.PageResult;
import com.taskflow.common.Result;
import com.taskflow.dto.EntryQueryDTO;
import com.taskflow.entity.EntryData;
import com.taskflow.service.EntryDataService;
import com.taskflow.service.ExternalApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 关单数据Controller
 */
@RestController
@RequestMapping("/entry")
@CrossOrigin
public class EntryDataController {

    @Autowired
    private EntryDataService entryDataService;

    @Autowired
    private ExternalApiService externalApiService;

    /**
     * 获取关单数据详情（包含所有明细）
     */
    @GetMapping("/{entryId}")
    public Result<List<EntryData>> getEntryData(@PathVariable String entryId) {
        try {
            List<EntryData> entryDataList = entryDataService.getByEntryIdWithDetails(entryId);
            if (entryDataList == null || entryDataList.isEmpty()) {
                return Result.error("关单数据不存在");
            }
            return Result.success(entryDataList);
        } catch (Exception e) {
            return Result.error("获取关单数据失败: " + e.getMessage());
        }
    }

    /**
     * 获取关单数据列表
     */
    @GetMapping("/list")
    public Result<PageResult<EntryData>> getEntryDataList(EntryQueryDTO query) {
        try {
            PageResult<EntryData> result = entryDataService.getEntryDataList(query);
            return Result.success(result);
        } catch (Exception e) {
            return Result.error("获取关单数据列表失败: " + e.getMessage());
        }
    }

    /**
     * 同步历史关单数据
     * @param companyTaxNo 企业税号
     * @param startDate 开始日期 yyyyMMdd
     * @param endDate 结束日期 yyyyMMdd
     */
    @PostMapping("/sync-history")
    public Result<Integer> syncHistoryData(
            @RequestParam String companyTaxNo,
            @RequestParam String startDate,
            @RequestParam String endDate) {
        try {
            List<EntryData> dataList = externalApiService.queryEntryDataByDateRange(companyTaxNo, startDate, endDate);
            
            // 保存到数据库（按明细保存，每个entryId可能有多条明细）
            int savedCount = 0;
            for (EntryData data : dataList) {
                // 检查关单明细是否已存在（entryId + gNo 联合主键）
                if (!entryDataService.existsByEntryIdAndGNo(data.getEntryId(), data.getGNo())) {
                    entryDataService.saveEntryData(data);
                    savedCount++;
                }
            }
            
            return Result.success("成功同步 " + savedCount + " 条关单明细数据", savedCount);
        } catch (Exception e) {
            return Result.error("同步失败: " + e.getMessage());
        }
    }
}

